'use strict';

const whiteList = [ '/login' ];// 白名单（一般登录注册这两个接口不需要校验token）此处也可配置在全局

module.exports = options => {
  return async function(ctx, next) {
    if (!whiteList.some(item => item == ctx.request.url)) { // 判断接口路径是否在白名单
      const token = ctx.request.header.authorization;// 拿到token

      if (token) { // 如果token存在
        try {
          const decoded = ctx.app.jwt.verify(token.slice(7), ctx.app.config.jwt.secret);// 解密token
          const redisToken = await ctx.app.redis.get(decoded.userName);
          // const decodedRedisToken = ctx.app.jwt.verify(redisToken.slice(7), ctx.app.config.jwt.secret);
          if (decoded && decoded.message) {
            ctx.body = {
              code: 50012,
              msg: decoded.message,
            };
          }
          if (token.slice(7) === redisToken) {
            await next();
          } else {
            ctx.body = { code: 50012, msg: '您的账号已在其他地方登录' };
          }
        } catch (error) {
          ctx.body = {
            code: 50012,
            msg: error.message,
          };
        }

        // else {
        //   ctx.username = decoded.username; // 把接口带来的用户名存在ctx上，方便后续做判断。
        //   await next();
        // }
      } else {
        ctx.body = {
          code: 0,
          msg: '没有token',
        };
      }


    } else {
      await next();
    }
  };
};
